{"componentChunkName":"component---src-templates-blog-post-blog-post-js","path":"/articulos/harness_engineering_desarrollo_software_ia/","result":{"data":{"mdx":{"body":"function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\n/* @jsxRuntime classic */\n\n/* @jsx mdx */\nvar _frontmatter = {\n  \"title\": \"Harness Engineering: qué es y cómo cambia el desarrollo con IA\",\n  \"date\": \"2026-08-23\",\n  \"description_sort\": \"Qué es Harness Engineering y cómo ayuda a desarrollar software con agentes de IA\",\n  \"description\": \"Descubre qué es Harness Engineering, cómo funcionan los agent harness y por qué están cambiando el desarrollo de software con agentes de inteligencia artificial.\",\n  \"featuredImage\": \"harness-engineering-pequena.jpg\",\n  \"twitterUsername\": \"@CursosDesarrol1\",\n  \"tags\": [\"inteligencia-artificial\", \"harness-engineering\", \"agentes-ia\", \"desarrollo-software\", \"codex\"]\n};\nvar layoutProps = {\n  _frontmatter: _frontmatter\n};\nvar MDXLayout = \"wrapper\";\nreturn function MDXContent(_ref) {\n  var components = _ref.components,\n      props = _objectWithoutProperties(_ref, [\"components\"]);\n\n  return mdx(MDXLayout, _extends({}, layoutProps, props, {\n    components: components,\n    mdxType: \"MDXLayout\"\n  }), mdx(\"span\", {\n    \"className\": \"gatsby-resp-image-wrapper\",\n    \"style\": {\n      \"position\": \"relative\",\n      \"display\": \"block\",\n      \"marginLeft\": \"auto\",\n      \"marginRight\": \"auto\",\n      \"maxWidth\": \"900px\"\n    }\n  }, \"\\n      \", mdx(\"a\", {\n    parentName: \"span\",\n    \"className\": \"gatsby-resp-image-link\",\n    \"href\": \"/static/2f5b8c9f5d4961a3434f560ef67e75f6/86440/harness-engineering-portada.jpg\",\n    \"style\": {\n      \"display\": \"block\"\n    },\n    \"target\": \"_blank\",\n    \"rel\": \"noopener\"\n  }, \"\\n    \", mdx(\"span\", {\n    parentName: \"a\",\n    \"className\": \"gatsby-resp-image-background-image\",\n    \"style\": {\n      \"paddingBottom\": \"56.333333333333336%\",\n      \"position\": \"relative\",\n      \"bottom\": \"0\",\n      \"left\": \"0\",\n      \"backgroundImage\": \"url('data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAALABQDASIAAhEBAxEB/8QAFwABAQEBAAAAAAAAAAAAAAAAAAIDBf/EABUBAQEAAAAAAAAAAAAAAAAAAAEC/9oADAMBAAIQAxAAAAHi3FVOYH//xAAWEAEBAQAAAAAAAAAAAAAAAAABACD/2gAIAQEAAQUCJDP/xAAUEQEAAAAAAAAAAAAAAAAAAAAQ/9oACAEDAQE/AT//xAAUEQEAAAAAAAAAAAAAAAAAAAAQ/9oACAECAQE/AT//xAAWEAADAAAAAAAAAAAAAAAAAAAAICH/2gAIAQEABj8CIv8A/8QAFxABAQEBAAAAAAAAAAAAAAAAAQAhEf/aAAgBAQABPyEbFNdkiVm//9oADAMBAAIAAwAAABDn7//EABYRAAMAAAAAAAAAAAAAAAAAABARIf/aAAgBAwEBPxBUf//EABQRAQAAAAAAAAAAAAAAAAAAABD/2gAIAQIBAT8QP//EABsQAQADAQEBAQAAAAAAAAAAAAEAETEhQVGB/9oACAEBAAE/EBoJxyEHAXyqfkqfPxjT2I1zhNT/2Q==')\",\n      \"backgroundSize\": \"cover\",\n      \"display\": \"block\"\n    }\n  }), \"\\n  \", mdx(\"img\", {\n    parentName: \"a\",\n    \"className\": \"gatsby-resp-image-image\",\n    \"alt\": \"Ilustración de un agente de IA trabajando con código, validaciones y controles de seguridad\",\n    \"title\": \"Ilustración de un agente de IA trabajando con código, validaciones y controles de seguridad\",\n    \"src\": \"/static/2f5b8c9f5d4961a3434f560ef67e75f6/86440/harness-engineering-portada.jpg\",\n    \"srcSet\": [\"/static/2f5b8c9f5d4961a3434f560ef67e75f6/37e03/harness-engineering-portada.jpg 300w\", \"/static/2f5b8c9f5d4961a3434f560ef67e75f6/2a8be/harness-engineering-portada.jpg 600w\", \"/static/2f5b8c9f5d4961a3434f560ef67e75f6/86440/harness-engineering-portada.jpg 900w\"],\n    \"sizes\": \"(max-width: 900px) 100vw, 900px\",\n    \"style\": {\n      \"width\": \"100%\",\n      \"height\": \"100%\",\n      \"margin\": \"0\",\n      \"verticalAlign\": \"middle\",\n      \"position\": \"absolute\",\n      \"top\": \"0\",\n      \"left\": \"0\"\n    },\n    \"loading\": \"lazy\"\n  }), \"\\n  \"), \"\\n    \"), mdx(\"br\", null), mdx(\"br\", null), mdx(\"h1\", null, \"Harness Engineering: la nueva forma de desarrollar software con agentes de inteligencia artificial\"), mdx(\"br\", null), mdx(\"p\", null, \"La inteligencia artificial aplicada a la programaci\\xF3n est\\xE1 evolucionando muy r\\xE1pido. Hace poco, usar IA para desarrollar software significaba copiar un fragmento de c\\xF3digo en un chat y pedir una explicaci\\xF3n. Despu\\xE9s llegaron los asistentes del editor capaces de completar funciones enteras. El siguiente paso son los \", mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"agentes de programaci\\xF3n\"), \": exploran un repositorio, modifican archivos, ejecutan comandos y prueban una tarea durante varios pasos.\"), mdx(\"p\", null, \"Sin embargo, tener un modelo potente no garantiza obtener buen software. Un agente necesita saber c\\xF3mo est\\xE1 organizado el proyecto, qu\\xE9 puede modificar, qu\\xE9 arquitectura debe respetar, c\\xF3mo demostrar que funciona y qu\\xE9 hacer si algo falla. Ah\\xED aparece un concepto cada vez m\\xE1s relevante en 2026: \", mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"Harness Engineering\"), \".\"), mdx(\"h2\", null, \"\\xBFQu\\xE9 es Harness Engineering?\"), mdx(\"p\", null, mdx(\"em\", {\n    parentName: \"p\"\n  }, \"Harness\"), \" puede traducirse como arn\\xE9s, estructura de control o sistema que mantiene algo dirigido. En el desarrollo con IA, un \", mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"agent harness\"), \" es la infraestructura que rodea al modelo y le permite actuar como un agente de desarrollo.\"), mdx(\"br\", null), mdx(CodeJs, {\n    mdxType: \"CodeJs\"\n  }, \"Agente de desarrollo = Modelo de IA + Harness\"), mdx(\"br\", null), mdx(\"p\", null, \"El modelo aporta razonamiento y generaci\\xF3n; el harness aporta el entorno de trabajo. Puede proporcionar contexto del proyecto, acceso controlado a archivos, comandos y documentaci\\xF3n, reglas arquitect\\xF3nicas, memoria entre pasos, permisos, tests y feedback sobre el resultado.\"), mdx(\"p\", null, \"Por tanto, \", mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"Harness Engineering es la pr\\xE1ctica de dise\\xF1ar ese entorno para que los agentes de IA desarrollen software de forma m\\xE1s fiable y aut\\xF3noma\"), \". No se trata solo de pedir c\\xF3digo mejor: se trata de crear un sistema donde el agente pueda encontrar informaci\\xF3n, actuar con l\\xEDmites y comprobar sus propias decisiones.\"), mdx(\"h2\", null, \"Del prompt engineering al context engineering y al harness engineering\"), mdx(\"p\", null, \"La evoluci\\xF3n puede entenderse en tres niveles.\"), mdx(\"h3\", null, \"1. Prompt Engineering\"), mdx(\"p\", null, \"El primer objetivo era aprender a formular instrucciones \\xFAtiles.\"), mdx(\"br\", null), mdx(CodeJs, {\n    mdxType: \"CodeJs\"\n  }, \"Usuario \\u2192 Prompt \\u2192 Modelo \\u2192 Respuesta\"), mdx(\"br\", null), mdx(\"p\", null, \"Funciona para generar una funci\\xF3n, explicar c\\xF3digo o resolver una duda aislada. Pero una aplicaci\\xF3n real requiere conocer arquitectura, convenciones, dependencias, decisiones anteriores y requisitos.\"), mdx(\"h3\", null, \"2. Context Engineering\"), mdx(\"p\", null, \"El siguiente reto consiste en decidir \", mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"qu\\xE9 informaci\\xF3n necesita conocer el modelo en cada momento\"), \": los archivos relevantes, las APIs, la documentaci\\xF3n, los tests y las restricciones. Ya no importa \\xFAnicamente c\\xF3mo se redacta el prompt, sino qu\\xE9 contexto recibe el agente.\"), mdx(\"h3\", null, \"3. Harness Engineering\"), mdx(\"p\", null, \"Cuando el modelo act\\xFAa sobre un repositorio aparece una capa adicional: hay que decidir qu\\xE9 sabe, qu\\xE9 puede hacer, c\\xF3mo se valida el resultado, qu\\xE9 ocurre si falla y qu\\xE9 feedback obtiene despu\\xE9s. Ese sistema completo es el harness.\"), mdx(\"h2\", null, \"\\xBFPor qu\\xE9 se habla ahora de Harness Engineering?\"), mdx(\"p\", null, \"Herramientas como Codex, Claude Code y otros agentes pueden inspeccionar repositorios, buscar c\\xF3digo, crear archivos, ejecutar tests y encadenar varias modificaciones. El problema deja de ser solo:\"), mdx(\"blockquote\", null, mdx(\"p\", {\n    parentName: \"blockquote\"\n  }, \"\\xBFPuede la IA escribir este c\\xF3digo?\")), mdx(\"p\", null, \"Y pasa a ser:\"), mdx(\"blockquote\", null, mdx(\"p\", {\n    parentName: \"blockquote\"\n  }, \"\\xBFPuede trabajar de manera fiable dentro de nuestro proyecto?\")), mdx(\"p\", null, \"Cuando un desarrollador copia una sugerencia, conserva el control de casi todo el proceso. Cuando un agente modifica una aplicaci\\xF3n directamente, necesitamos mecanismos que limiten su comportamiento y conviertan sus afirmaciones en evidencia verificable.\"), mdx(\"p\", null, \"En febrero de 2026, \", mdx(\"a\", {\n    parentName: \"p\",\n    \"href\": \"https://openai.com/index/harness-engineering/\"\n  }, \"OpenAI public\\xF3 una experiencia de desarrollo orientado a agentes\"), \" en la que un equipo construy\\xF3 un producto interno con c\\xF3digo, pruebas, configuraci\\xF3n de integraci\\xF3n continua, documentaci\\xF3n y herramientas producidos por Codex. Su aprendizaje principal fue que el trabajo humano se desplazaba hacia el dise\\xF1o del entorno, las especificaciones y los ciclos de feedback que permiten al agente trabajar de forma fiable.\"), mdx(\"h2\", null, \"Un ejemplo sencillo\"), mdx(\"p\", null, \"Supongamos una aplicaci\\xF3n con React, NestJS, PostgreSQL, Jest, Playwright y GitHub Actions. Pedimos a un agente: \\xABimplementa la recuperaci\\xF3n de contrase\\xF1a\\xBB.\"), mdx(\"p\", null, \"Sin un harness adecuado podr\\xEDa interpretar mal la arquitectura, a\\xF1adir dependencias innecesarias, tocar c\\xF3digo sensible o terminar una implementaci\\xF3n parcial afirmando que est\\xE1 lista. No siempre ser\\xEDa un problema de capacidad del modelo: puede ser que el entorno no le haya dado se\\xF1ales suficientemente claras.\"), mdx(\"p\", null, \"Con un buen harness, el repositorio define arquitectura, convenciones, restricciones, tests y validaciones. El agente consulta esas reglas, implementa el cambio y ejecuta comprobaciones como:\"), mdx(\"br\", null), mdx(CodeJs, {\n    mdxType: \"CodeJs\"\n  }, \"npm run lint\", mdx(\"br\", null), \"npm run test\", mdx(\"br\", null), \"npm run build\"), mdx(\"br\", null), mdx(\"p\", null, \"Si un test falla, el resultado pasa a ser feedback para otra iteraci\\xF3n. Si rompe una restricci\\xF3n arquitect\\xF3nica, una comprobaci\\xF3n autom\\xE1tica lo detecta. La finalizaci\\xF3n deja de depender de \\xABparece correcto\\xBB y exige evidencia.\"), mdx(\"br\", null), mdx(CodeJs, {\n    mdxType: \"CodeJs\"\n  }, \"Tarea \\u2192 Contexto \\u2192 Plan \\u2192 Implementaci\\xF3n\", mdx(\"br\", null), \"Tests \\u2192 Validaci\\xF3n \\u2192 Feedback \\u2192 Nueva iteraci\\xF3n\"), mdx(\"br\", null), mdx(\"span\", {\n    \"className\": \"gatsby-resp-image-wrapper\",\n    \"style\": {\n      \"position\": \"relative\",\n      \"display\": \"block\",\n      \"marginLeft\": \"auto\",\n      \"marginRight\": \"auto\",\n      \"maxWidth\": \"900px\"\n    }\n  }, \"\\n      \", mdx(\"a\", {\n    parentName: \"span\",\n    \"className\": \"gatsby-resp-image-link\",\n    \"href\": \"/static/3c6a002ceb6b993caaa9d999490c6969/86440/harness-ciclo-validacion.jpg\",\n    \"style\": {\n      \"display\": \"block\"\n    },\n    \"target\": \"_blank\",\n    \"rel\": \"noopener\"\n  }, \"\\n    \", mdx(\"span\", {\n    parentName: \"a\",\n    \"className\": \"gatsby-resp-image-background-image\",\n    \"style\": {\n      \"paddingBottom\": \"56.333333333333336%\",\n      \"position\": \"relative\",\n      \"bottom\": \"0\",\n      \"left\": \"0\",\n      \"backgroundImage\": \"url('data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAALABQDASIAAhEBAxEB/8QAGAAAAgMAAAAAAAAAAAAAAAAAAAECAwX/xAAVAQEBAAAAAAAAAAAAAAAAAAABAv/aAAwDAQACEAMQAAABx5UupQgf/8QAGBAAAgMAAAAAAAAAAAAAAAAAARAREjH/2gAIAQEAAQUCAFdcr//EABQRAQAAAAAAAAAAAAAAAAAAABD/2gAIAQMBAT8BP//EABQRAQAAAAAAAAAAAAAAAAAAABD/2gAIAQIBAT8BP//EABcQAAMBAAAAAAAAAAAAAAAAAAAgMWH/2gAIAQEABj8C0i//xAAbEAACAgMBAAAAAAAAAAAAAAABEQAxECFhQf/aAAgBAQABPyExtl68nenIbgJFRknj/9oADAMBAAIAAwAAABCEL//EABYRAQEBAAAAAAAAAAAAAAAAABEQIf/aAAgBAwEBPxA1n//EABYRAQEBAAAAAAAAAAAAAAAAABEQIf/aAAgBAgEBPxBwn//EABkQAQEBAQEBAAAAAAAAAAAAAAERADEhQf/aAAgBAQABPxBgAEEcTuojwiX4dFTm91R5l6KPqZ3/2Q==')\",\n      \"backgroundSize\": \"cover\",\n      \"display\": \"block\"\n    }\n  }), \"\\n  \", mdx(\"img\", {\n    parentName: \"a\",\n    \"className\": \"gatsby-resp-image-image\",\n    \"alt\": \"Diagrama del ciclo de trabajo de un agente de IA: tarea, implementación, pruebas y feedback\",\n    \"title\": \"Diagrama del ciclo de trabajo de un agente de IA: tarea, implementación, pruebas y feedback\",\n    \"src\": \"/static/3c6a002ceb6b993caaa9d999490c6969/86440/harness-ciclo-validacion.jpg\",\n    \"srcSet\": [\"/static/3c6a002ceb6b993caaa9d999490c6969/37e03/harness-ciclo-validacion.jpg 300w\", \"/static/3c6a002ceb6b993caaa9d999490c6969/2a8be/harness-ciclo-validacion.jpg 600w\", \"/static/3c6a002ceb6b993caaa9d999490c6969/86440/harness-ciclo-validacion.jpg 900w\"],\n    \"sizes\": \"(max-width: 900px) 100vw, 900px\",\n    \"style\": {\n      \"width\": \"100%\",\n      \"height\": \"100%\",\n      \"margin\": \"0\",\n      \"verticalAlign\": \"middle\",\n      \"position\": \"absolute\",\n      \"top\": \"0\",\n      \"left\": \"0\"\n    },\n    \"loading\": \"lazy\"\n  }), \"\\n  \"), \"\\n    \"), mdx(\"br\", null), mdx(\"br\", null), mdx(\"h2\", null, \"Las piezas de un Development Harness\"), mdx(\"p\", null, \"No existe una arquitectura universal, pero los harness de desarrollo eficaces suelen combinar estas piezas.\"), mdx(\"span\", {\n    \"className\": \"gatsby-resp-image-wrapper\",\n    \"style\": {\n      \"position\": \"relative\",\n      \"display\": \"block\",\n      \"marginLeft\": \"auto\",\n      \"marginRight\": \"auto\",\n      \"maxWidth\": \"900px\"\n    }\n  }, \"\\n      \", mdx(\"a\", {\n    parentName: \"span\",\n    \"className\": \"gatsby-resp-image-link\",\n    \"href\": \"/static/9e654d564bc4cbf5f0c76ee25565e3e8/86440/harness-componentes.jpg\",\n    \"style\": {\n      \"display\": \"block\"\n    },\n    \"target\": \"_blank\",\n    \"rel\": \"noopener\"\n  }, \"\\n    \", mdx(\"span\", {\n    parentName: \"a\",\n    \"className\": \"gatsby-resp-image-background-image\",\n    \"style\": {\n      \"paddingBottom\": \"56.333333333333336%\",\n      \"position\": \"relative\",\n      \"bottom\": \"0\",\n      \"left\": \"0\",\n      \"backgroundImage\": \"url('data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAALABQDASIAAhEBAxEB/8QAGAAAAwEBAAAAAAAAAAAAAAAAAAIDBAX/xAAWAQEBAQAAAAAAAAAAAAAAAAACAAP/2gAMAwEAAhADEAAAAedTMzzmKS//xAAaEAADAAMBAAAAAAAAAAAAAAAAAQIREiEi/9oACAEBAAEFAplaNSXPrPG2M//EABURAQEAAAAAAAAAAAAAAAAAAAEQ/9oACAEDAQE/AWf/xAAVEQEBAAAAAAAAAAAAAAAAAAAQEf/aAAgBAgEBPwGn/8QAGBAAAwEBAAAAAAAAAAAAAAAAARAhADH/2gAIAQEABj8CoGnWF//EABsQAQACAgMAAAAAAAAAAAAAAAEAESFBMVHR/9oACAEBAAE/IagAO9xwYdAlPiWrmO5aiVn/2gAMAwEAAgADAAAAEIzP/8QAFxEBAQEBAAAAAAAAAAAAAAAAAQARMf/aAAgBAwEBPxAO9hb/xAAWEQEBAQAAAAAAAAAAAAAAAAABEQD/2gAIAQIBAT8QCEmQu//EABsQAQACAwEBAAAAAAAAAAAAAAEAESExQVFx/9oACAEBAAE/ECOitvgfOx7CHgU9lhYN5vSABaoZbg67HKqs/9k=')\",\n      \"backgroundSize\": \"cover\",\n      \"display\": \"block\"\n    }\n  }), \"\\n  \", mdx(\"img\", {\n    parentName: \"a\",\n    \"className\": \"gatsby-resp-image-image\",\n    \"alt\": \"Ilustración de un development harness con contexto, herramientas, restricciones, validación y feedback\",\n    \"title\": \"Ilustración de un development harness con contexto, herramientas, restricciones, validación y feedback\",\n    \"src\": \"/static/9e654d564bc4cbf5f0c76ee25565e3e8/86440/harness-componentes.jpg\",\n    \"srcSet\": [\"/static/9e654d564bc4cbf5f0c76ee25565e3e8/37e03/harness-componentes.jpg 300w\", \"/static/9e654d564bc4cbf5f0c76ee25565e3e8/2a8be/harness-componentes.jpg 600w\", \"/static/9e654d564bc4cbf5f0c76ee25565e3e8/86440/harness-componentes.jpg 900w\"],\n    \"sizes\": \"(max-width: 900px) 100vw, 900px\",\n    \"style\": {\n      \"width\": \"100%\",\n      \"height\": \"100%\",\n      \"margin\": \"0\",\n      \"verticalAlign\": \"middle\",\n      \"position\": \"absolute\",\n      \"top\": \"0\",\n      \"left\": \"0\"\n    },\n    \"loading\": \"lazy\"\n  }), \"\\n  \"), \"\\n    \"), mdx(\"br\", null), mdx(\"br\", null), mdx(\"h3\", null, \"Contexto y documentaci\\xF3n\"), mdx(\"p\", null, \"El agente debe encontrar r\\xE1pido la informaci\\xF3n relevante. Archivos como \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"AGENTS.md\"), \", \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"README.md\"), \", \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"docs/\"), \", especificaciones y tests sirven como mapa. La documentaci\\xF3n ya no est\\xE1 dirigida \\xFAnicamente a personas: tambi\\xE9n debe ser localizable y comprensible para un agente.\"), mdx(\"h3\", null, \"Herramientas y permisos\"), mdx(\"p\", null, \"Leer y escribir archivos, buscar c\\xF3digo, ejecutar comandos, consultar documentaci\\xF3n o llamar APIs son capacidades que deben estar disponibles de forma controlada. El objetivo es reducir la improvisaci\\xF3n y limitar las acciones que puedan afectar al sistema.\"), mdx(\"h3\", null, \"Restricciones arquitect\\xF3nicas\"), mdx(\"p\", null, \"Un agente no deber\\xEDa poder modificar cualquier parte de un proyecto sin reglas. Una arquitectura puede, por ejemplo, permitir dependencias en una direcci\\xF3n determinada y rechazar las inversas. Lo importante no es dictar cada l\\xEDnea de implementaci\\xF3n, sino establecer \", mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"invariantes que nunca se deben romper\"), \".\"), mdx(\"h3\", null, \"Verificaci\\xF3n y feedback\"), mdx(\"p\", null, \"La parte decisiva es sustituir afirmaciones por comprobaciones ejecutables. Tests unitarios, integraci\\xF3n, end-to-end, an\\xE1lisis est\\xE1tico, builds y revisiones estructurales convierten el resultado de una acci\\xF3n en informaci\\xF3n \\xFAtil para la siguiente.\"), mdx(\"p\", null, \"Tambi\\xE9n son importantes las herramientas de diagn\\xF3stico. Las \", mdx(\"a\", {\n    parentName: \"p\",\n    \"href\": \"/articulos/novedades_herramientas_desarrollador_chome_90/\"\n  }, \"DevTools de Chrome\"), \" son un ejemplo de c\\xF3mo la observaci\\xF3n de la interfaz y el rendimiento puede complementar los tests automatizados.\"), mdx(\"h2\", null, \"AGENTS.md: instrucciones dentro del repositorio\"), mdx(\"p\", null, \"Una t\\xE9cnica habitual es mantener un archivo \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"AGENTS.md\"), \" con un mapa inicial: arquitectura, comandos obligatorios, convenciones, restricciones de datos y rutas hacia documentaci\\xF3n m\\xE1s detallada.\"), mdx(\"br\", null), mdx(CodeJs, {\n    mdxType: \"CodeJs\"\n  }, \"# Testing\", mdx(\"br\", null), mdx(\"br\", null), \"Toda nueva funcionalidad debe incluir tests.\", mdx(\"br\", null), mdx(\"br\", null), \"Antes de terminar ejecutar:\", mdx(\"br\", null), mdx(\"br\", null), \"npm run lint\", mdx(\"br\", null), \"npm run test\", mdx(\"br\", null), \"npm run build\"), mdx(\"br\", null), mdx(\"p\", null, \"No sustituye a los tests ni a la arquitectura. Sirve para que el agente sepa c\\xF3mo navegar el proyecto. El valor est\\xE1 en que las reglas importantes vivan junto al c\\xF3digo, est\\xE9n versionadas y puedan comprobarse.\"), mdx(\"h2\", null, \"Los tests ganan importancia con la IA\"), mdx(\"p\", null, \"Cuanto m\\xE1s c\\xF3digo pueda producir una IA, m\\xE1s dif\\xEDcil ser\\xE1 revisar cada l\\xEDnea manualmente. Por eso los tests no son un detalle final: forman parte del sistema que controla al agente.\"), mdx(\"br\", null), mdx(CodeJs, {\n    mdxType: \"CodeJs\"\n  }, \"M\\xE1s generaci\\xF3n autom\\xE1tica \\u2192 m\\xE1s necesidad de validaci\\xF3n autom\\xE1tica\"), mdx(\"br\", null), mdx(\"p\", null, \"Las pruebas unitarias, de integraci\\xF3n y end-to-end, junto al an\\xE1lisis est\\xE1tico y las reglas de arquitectura, permiten detectar errores antes de que se conviertan en deuda t\\xE9cnica. Esta disciplina tambi\\xE9n beneficia a proyectos web est\\xE1ticos y de frontend: entender la estructura y el proceso de build, como se explica en \", mdx(\"a\", {\n    parentName: \"p\",\n    \"href\": \"/articulos/que_es_gatsby_primeros_pasos/\"\n  }, \"esta introducci\\xF3n a Gatsby\"), \", hace que el trabajo automatizado sea m\\xE1s predecible.\"), mdx(\"h2\", null, \"Harness Engineering no elimina al desarrollador\"), mdx(\"p\", null, \"Los agentes reducen parte del c\\xF3digo escrito manualmente, pero alguien sigue teniendo que decidir qu\\xE9 construir, qu\\xE9 requisitos son v\\xE1lidos, qu\\xE9 riesgos aceptar, qu\\xE9 arquitectura utilizar y cu\\xE1ndo existe evidencia suficiente para dar una tarea por terminada.\"), mdx(\"p\", null, \"El trabajo puede desplazarse de escribir cada l\\xEDnea a dise\\xF1ar sistemas capaces de producir y validar c\\xF3digo. Sigue siendo ingenier\\xEDa de software, pero a un nivel de abstracci\\xF3n distinto.\"), mdx(\"h2\", null, \"Harness Engineering frente a vibe coding\"), mdx(\"p\", null, \"En el llamado \", mdx(\"em\", {\n    parentName: \"p\"\n  }, \"vibe coding\"), \", el resultado depende de una conversaci\\xF3n larga: \\xABcrea esto\\xBB, \\xABa\\xF1ade aquello\\xBB, \\xABcorrige el error\\xBB. Harness Engineering intenta trasladar el conocimiento que vive en esa conversaci\\xF3n a reglas persistentes, documentaci\\xF3n, automatizaciones, validaciones y feedback loops.\"), mdx(\"p\", null, \"Un prompt sigue importando, pero es una pieza de un sistema mayor:\"), mdx(\"br\", null), mdx(CodeJs, {\n    mdxType: \"CodeJs\"\n  }, \"Prompt + contexto + tooling + testing + restricciones + feedback = Harness Engineering\"), mdx(\"br\", null), mdx(\"p\", null, \"Un prompt excelente dentro de un entorno deficiente seguir\\xE1 produciendo resultados poco fiables. Un buen harness busca que el proceso sea resistente incluso cuando dos ejecuciones del modelo no son id\\xE9nticas.\"), mdx(\"h2\", null, \"\\xBFQu\\xE9 deber\\xEDa aprender un desarrollador en 2026?\"), mdx(\"p\", null, \"Aprender Codex o Claude Code es \\xFAtil, pero los principios sobreviven a una herramienta concreta. Conviene saber proporcionar contexto, escribir especificaciones verificables, estructurar repositorios legibles, automatizar pruebas, definir restricciones arquitect\\xF3nicas, controlar permisos y dise\\xF1ar tareas que puedan ejecutarse de forma aut\\xF3noma.\"), mdx(\"p\", null, \"El repositorio pasa a ser algo m\\xE1s que c\\xF3digo, configuraci\\xF3n y documentaci\\xF3n: tambi\\xE9n es el entorno desde el que los agentes aprenden c\\xF3mo mantener ese software.\"), mdx(\"h2\", null, \"Conclusi\\xF3n\"), mdx(\"p\", null, \"Harness Engineering representa el paso de usar IA para responder preguntas sobre c\\xF3digo a dise\\xF1ar entornos donde los agentes puedan actuar sobre sistemas de software con controles y evidencia. El debate ya no es solo qu\\xE9 modelo genera mejor c\\xF3digo, sino qu\\xE9 sistema permite que un agente produzca software fiable.\"), mdx(\"p\", null, \"La pregunta relevante para los pr\\xF3ximos a\\xF1os quiz\\xE1 no sea \\xFAnicamente \\xAB\\xBFqu\\xE9 puede programar una inteligencia artificial?\\xBB, sino \\xAB\\xBFqu\\xE9 entorno necesitamos construir para que pueda hacerlo de forma fiable?\\xBB.\"), mdx(\"h2\", null, \"Preguntas frecuentes\"), mdx(\"h3\", null, \"\\xBFQu\\xE9 es Harness Engineering?\"), mdx(\"p\", null, \"Es la pr\\xE1ctica de dise\\xF1ar el contexto, herramientas, restricciones y mecanismos de validaci\\xF3n que permiten a un agente de IA trabajar de forma fiable sobre un proyecto de software.\"), mdx(\"h3\", null, \"\\xBFQu\\xE9 es un Agent Harness?\"), mdx(\"p\", null, \"Es la infraestructura que rodea a un modelo de IA y le permite interactuar con herramientas, archivos, comandos, memoria y validaciones para completar tareas de varios pasos.\"), mdx(\"h3\", null, \"\\xBFQu\\xE9 diferencia hay entre Prompt Engineering y Harness Engineering?\"), mdx(\"p\", null, \"Prompt Engineering se centra en la instrucci\\xF3n enviada al modelo. Harness Engineering incluye adem\\xE1s contexto, permisos, herramientas, tests, arquitectura y feedback autom\\xE1tico.\"), mdx(\"h3\", null, \"\\xBFQu\\xE9 relaci\\xF3n tiene con Codex o Claude Code?\"), mdx(\"p\", null, \"Son agentes capaces de trabajar directamente sobre proyectos. Harness Engineering estudia c\\xF3mo preparar el proyecto y su entorno para que esos agentes trabajen de manera m\\xE1s fiable y aut\\xF3noma.\"), mdx(\"h3\", null, \"\\xBFEs necesario para usar IA al programar?\"), mdx(\"p\", null, \"No para una consulta peque\\xF1a o un fragmento de c\\xF3digo. Su importancia crece cuando un agente realiza cambios complejos o trabaja durante m\\xE1s tiempo sobre un repositorio.\"), mdx(\"h2\", null, \"Referencias y lecturas recomendadas\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"a\", {\n    parentName: \"li\",\n    \"href\": \"https://openai.com/index/harness-engineering/\"\n  }, \"OpenAI \\u2014 Harness engineering: leveraging Codex in an agent-first world\")), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"a\", {\n    parentName: \"li\",\n    \"href\": \"https://www.anthropic.com/engineering/harness-design-long-running-apps\"\n  }, \"Anthropic \\u2014 Harness design for long-running application development\"))));\n}\n;\nMDXContent.isMDXComponent = true;","frontmatter":{"twitterUsername":"@CursosDesarrol1","title":"Harness Engineering: qué es y cómo cambia el desarrollo con IA","description":"Descubre qué es Harness Engineering, cómo funcionan los agent harness y por qué están cambiando el desarrollo de software con agentes de inteligencia artificial.","featuredImage":{"childImageSharp":{"fluid":{"base64":"data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAALABQDASIAAhEBAxEB/8QAFwABAQEBAAAAAAAAAAAAAAAAAAIDBf/EABUBAQEAAAAAAAAAAAAAAAAAAAEC/9oADAMBAAIQAxAAAAHi3FVOYH//xAAWEAEBAQAAAAAAAAAAAAAAAAABACD/2gAIAQEAAQUCJDP/xAAUEQEAAAAAAAAAAAAAAAAAAAAQ/9oACAEDAQE/AT//xAAUEQEAAAAAAAAAAAAAAAAAAAAQ/9oACAECAQE/AT//xAAUEAEAAAAAAAAAAAAAAAAAAAAg/9oACAEBAAY/Al//xAAXEAEBAQEAAAAAAAAAAAAAAAABABEh/9oACAEBAAE/IR2y8dkiVm//2gAMAwEAAgADAAAAEOfv/8QAFhEAAwAAAAAAAAAAAAAAAAAAEBEh/9oACAEDAQE/EFR//8QAFBEBAAAAAAAAAAAAAAAAAAAAEP/aAAgBAgEBPxA//8QAGxABAAMBAQEBAAAAAAAAAAAAAQARMSFBUYH/2gAIAQEAAT8QCgnHIQOQvlU/JU+fjGnsVrnCan//2Q==","aspectRatio":1.7699115044247788,"src":"/static/80906be6560af13ce18e895ba4c4b76c/88b18/harness-engineering-pequena.jpg","srcSet":"/static/80906be6560af13ce18e895ba4c4b76c/fd013/harness-engineering-pequena.jpg 200w,\n/static/80906be6560af13ce18e895ba4c4b76c/88b18/harness-engineering-pequena.jpg 300w","sizes":"(max-width: 300px) 100vw, 300px"}}}}}},"pageContext":{"slug":"/articulos/harness_engineering_desarrollo_software_ia/","previous":{"fields":{"slug":"/cursos/curso_angular_profesional/"}},"next":{"fields":{"slug":"/avisos_legales/politica_cookies/"}}}},"staticQueryHashes":["2032873950"]}